<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // 思考：是否有闭包产生，this 是什么？
      // 思考题 1：
      var name = "The Window";
      var obj = {
        name: "My Object",
        getNameFunc: function () {
          return function () {
            return this.name;
          };
        },
      };

      console.log(obj.getNameFunc()()); // The Window
      var f = obj.getNameFunc();
      // 返回的是一个匿名函数,匿名函数的 this 执行 window(记牢即可)
      var f = function () {
        return this.name;
      };
      f();
      // 没有访问局部变量，没有闭包产生

      // 思考题 2：
      var name1 = "The Window1";
      var obj1 = {
        name1: "My Object1",
        getNameFunc: function () {
          // obj1 调用了函数 getNameFunc(), 因此 this 就是 obj1
          var that = this;
          return function () {
            return that.name1;
          };
        },
      };
      console.log(obj1.getNameFunc()()); // My Object

      // var f = obj1.getNameFunc();
      // var f = function () {
      //     return that.name1;
      // };
      // f();

      /* 
         总结：
             1. 闭包是什么？
                    闭包是一个函数(局部变量所在的函数)。
             2. 闭包的作用：
                    在函数外部，访问函数内部的变量(局部变量)。    
      */
    </script>
  </body>
</html>
